"""输入两个正整数m和n，求其最大公约数和最小公倍数。"""
def gcd(m: int, n: int) -> int:
    """求最大公约数（Greatest Common Divisor, GCD）。

    Args:
    m: 第一个正整数
    n: 第二个正整数

    Returns:
    最大公约数
    """
    while n != 0:
        m, n = n, m % n
    return m

def lcm(m: int, n: int) -> int:
    """求最小公倍数（Least Common Multiple, LCM）。

    Args:
    m: 第一个正整数
    n: 第二个正整数

    Returns:
    最小公倍数
    """
    return m * n // gcd(m, n)

def get_positive_integer(prompt: str) -> int:
    """获取用户输入的正整数。

    Args:
    prompt: 输入提示信息

    Returns:
    用户输入的正整数
    """
    while True:
        user_input = input(prompt)
        if user_input:  # 检查输入是否为空
            try:
                value = int(user_input)
                if value > 0:
                    return value
                else:
                    print("输入错误，请输入一个正整数。")
            except ValueError:
                print("输入错误，请输入一个有效的整数。")
        else:
            print("输入不能为空，请输入一个正整数。")


# 输入两个正整数
m = get_positive_integer("请输入正整数m: ")
n = get_positive_integer("请输入正整数n: ")

# 计算最大公约数和最小公倍数
gcd_result = gcd(m, n)
lcm_result = lcm(m, n)

# 输出结果
print(f"{m}和{n}的最大公约数是：{gcd_result}")
print(f"{m}和{n}的最小公倍数是：{lcm_result}")
